﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GA.Shared.Interfaces;
using System.Windows;
using System.Runtime.Serialization;
using System.Windows.Data;

namespace GA.Shared.Objects
{
    public class Skill : LinkedDependencyObject
    {
        /// <summary>
        /// Identifies the Id Property.
        /// </summary>
        public static readonly DependencyProperty IdProperty =
            RegisterProperty(
                "Id",
                typeof(int),
                typeof(Skill),
                new PropertyMetadata(-1));

        /// <summary>
        /// Identifies the Level Property.
        /// </summary>
        public static readonly DependencyProperty LevelProperty =
            RegisterProperty(
                "Level",
                typeof(int),
                typeof(Skill),
                new PropertyMetadata(-1));

        /// <summary>
        /// Identifies the SkillTypeId Property.
        /// </summary>
        public static readonly DependencyProperty SkillTypeIdProperty =
            RegisterProperty(
                "SkillTypeId",
                typeof(int),
                typeof(Skill),
                new PropertyMetadata(-1));

        /// <summary>
        /// Identifies the SkillType Property.
        /// </summary>
        public static readonly DependencyProperty SkillTypeProperty =
            RegisterProperty(
                "SkillType",
                typeof(SkillType),
                typeof(Skill),
                new PropertyMetadata(null));

        /// <summary>
        /// Gets or sets the Id.
        /// </summary>
        
        public int Id
        {
            get { return (int)SafeGetValue(IdProperty); }
            set { SafeSetValue(IdProperty, value); }
        }

        /// <summary>
        /// Gets or sets the Level.
        /// </summary>
        
        public int Level
        {
            get { return (int)SafeGetValue(LevelProperty); }
            set { SafeSetValue(LevelProperty, value); }
        }

        /// <summary>
        /// Gets or sets the SkillType Id.
        /// </summary>
        
        public int SkillTypeId
        {
            get { return (int)SafeGetValue(SkillTypeIdProperty); }
            set { SafeSetValue(SkillTypeIdProperty, value); }
        }

        /// <summary>
        /// Gets or sets the SkillType.
        /// </summary>
        
        public SkillType SkillType
        {
            get { return (SkillType)SafeGetValue(SkillTypeProperty); }
            set { SafeSetValue(SkillTypeProperty, value); }
        }

        public Skill()
        {
        }

        public Skill(LinkedDependencyObject baseObject)
            : base(baseObject)
        {
        }

        public Skill(LinkedDependencyObject baseObject, BindingMode bindingMode)
            : base(baseObject, bindingMode)
        {
        }
    }
}
